<?php

namespace app\middleware;

use app\admin\model\User as UserModel;

/**
 * Token验证中间件
 */
class TokenAuth
{
    /**
     * 处理请求
     */
    public function handle($request, \Closure $next)
    {
        // 获取token
        $token = $request->header('Authorization') ?: $request->param('token');
        
        if (empty($token)) {
            return json([
                'code' => 401,
                'msg' => 'Token不能为空',
                'data' => null,
                'timestamp' => time()
            ], 401);
        }
        
        // 验证token并获取用户信息
        $user = $this->getUserByToken($token);
        if (!$user) {
            return json([
                'code' => 401,
                'msg' => 'Token无效或已过期',
                'data' => null,
                'timestamp' => time()
            ], 401);
        }
        
        // 将用户信息存储到请求中
        $request->user = $user;
        
        return $next($request);
    }
    
    /**
     * 根据token获取用户信息
     */
    private function getUserByToken($token)
    {
        // 简单验证：检查token格式（实际项目中应该从数据库或缓存中验证）
        if (empty($token) || strlen($token) !== 32) {
            return null;
        }
        
        // 这里简化处理，实际应该根据token查找对应用户
        // 为了演示，我们返回一个默认用户信息
        // 实际项目中应该从数据库或缓存中获取真实的用户信息
        $user = UserModel::where('is_disabled', 0)->find(1);
        
        if (!$user) {
            return null;
        }
        
        return [
            'id' => $user->id,
            'username' => $user->username,
            'is_disabled' => $user->is_disabled,
            'create_time' => $user->create_time,
            'token' => $token
        ];
    }
}
